/* Die Klasse TuringMaschine
 * 
 * Die Klasse TuringMaschine ist die Hauptklasse. Sie hat die Aufgabe
 * Alle Klassen zu Initialisieren und gibt die Arbeitsweise vor.
 * 
 * 
 * Datei:  TuringMaschine.java          Autor:    Martin Fischer
 * Datum:  20.11.2011                 	Version:  2.0
 *
 *
 */
package kommunikation.Parser;

public class TuringMaschine
{
  /*
   * Das Turing Band
   */
  public Band band;
  /*
   * Sammlung aller Zustaende
   */
  protected Zustand zustaende[];
  /*
   * der aktuelle Zustand der Maschine
   */
  protected Zustand aktuellerZustand;
  /*
   * In dem Zustand endet die Maschine bei einer ungueltigen Eingabe
   */
  protected Zustand fehlerZustand;
  /*
   * das aktuel gelesene Zeichen
   */
  private char lesen;


  /*
   * Dient zur Initialisierung der Maschine.
   */
  public void initialisieren (String eingabewort)
  {
    /* 
     * wird von jeweiligen Subklasse initialisiert
     */
  }

  /*
   * Diese Methode sorgt fuer die Schrittweise Abarbeitung der Woerter 
   * auf dem Band.
   */
  public void arbeiten ()
  {
    lesen = band.getAktuellesZeichen ();
    Konfig k = aktuellerZustand.getKonfig (lesen);
    char schreiben = k.getSchreibeZeichen ();
    band.setAktuellesZeichen (schreiben);
    if (k.getOperation () == k.L)
    {
      band.LSLinks ();
    }
    if (k.getOperation () == k.R)
    {
      band.LSRechts ();
    }
    if (k.getOperation () == k.N)
    {
      band.LSStop ();
    }
    aktuellerZustand = k.getFolgeZustand ();
  }  


  /*
   * gib den aktuellen Zusatand
   */
  public Zustand getAktuellenZusatnd ()
  {
    return aktuellerZustand;
  }
  
  
  /*
   * Befindet sich die Maschine in einem Fehlerzustand?
   */
  public boolean istImFehlerzustand ()
  {
    if (aktuellerZustand == fehlerZustand)
    {
      return true;
    }
    return false;
  }
}